package com.yuxiang.flowable.service;

import com.alibaba.fastjson.JSONObject;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.task.api.Task;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

/**
 * @author : yx-0176
 * @description
 * @date : 2022/3/9
 */
public interface FlowableService {
    /**
     * 启动流程
     *
     * @param key       流程key
     * @param variables 参数
     * @return 流程id
     */
    String startProcessInstance(String key, Object variables);

    /**
     * 结束流程
     *
     * @param processId 流程id
     * @param reason    原因
     * @return 流程id
     */
    void endProcessInstance(String processId, String reason);

    /**
     * 处理任务
     *
     * @param taskId    任务id
     * @param variables 参数
     */
    void handleProcessTask(String taskId, Object variables);

    /**
     * 获取当前任务中参数信息
     *
     * @param taskId 任务id
     * @return
     */
    Object getTaskInfo(String taskId);


    List<Task> getTaskList(String taskCandidateGroup);

    /**
     * 获取流程操作记录
     *
     * @param processId
     * @return
     */
    List<HistoricActivityInstance> getHistory(String processId);


    /**
     * obj转map
     *
     * @param obj
     * @return
     */
    default Map<String, Object> objectToMap(Object obj) {
        if (obj instanceof Map){
            return (Map<String, Object>)obj;
        }
        return JSONObject.parseObject(JSONObject.toJSONString(obj), Map.class);
    }

    default String listToString(List<String> list) {
        if (null == list) {
            return "";
        }
        return String.join(",", list);
    }

    default String getISO8601Timestamp(Date date) {
        TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        df.setTimeZone(tz);
        String nowAsISO = df.format(date);
        return nowAsISO;
    }


}
